package ctr.stage;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.Date;

import javax.swing.JButton;
import javax.swing.JOptionPane;

import jdbc.Connexion;
import metier.CategorieStage;
import metier.Stage;
import metier.jdbc.stage.StageJdbc;
import vue.MenuControle;
import vue.stage.JPanAjoutStage;
import configuration.Constante;
import configuration.MessageAppli;
import ctr.util.DateUtil;

public class GestAjoutStage implements ActionListener {

	private JPanAjoutStage jPanAjoutStage;

	public GestAjoutStage(JPanAjoutStage jPanAjoutStage) {
		this.jPanAjoutStage = jPanAjoutStage;
	}

	@Override
	public void actionPerformed(ActionEvent actionEvent) {

		// Permet depuis le champ de saisi ou du bouton de créer le stage.
		if (actionEvent.getSource() instanceof JButton) {
			ajoutStage();
		}
	}

	/**
	 * Permet l'ajout d'un stage.
	 */
	private void ajoutStage() {
		// ActionListener du JTextField.
		// JTextField champCategorie = jPanAjoutStage.getJtf_NomStage();
		String champAnnee = jPanAjoutStage.getJtf_NomAnnee().getText();

		CategorieStage categorieStage = (CategorieStage) jPanAjoutStage
				.getJcb_NomCategorie().getSelectedItem();

		try {

			// TODO penser à réinitialiser la page en changeant le parametre qui
			// est en erreur!
			// Test l'année entrée
			if (champAnnee.equals("")){
				throw new Exception("Veuillez selectionner une annee");
			}else if (!champAnnee.matches(Constante.REGEX_4_NUMERIQUE)) {
				throw new Exception(MessageAppli.MSG_ANNEE_ERREUR_ENTRE);
			} 

			// Test Date debut
			Date dateDeb = DateUtil.checkDate(Constante.FORMAT_DATE_SHORT,
					jPanAjoutStage.getJtf_DateDeb().getText());
			if (dateDeb == null) {
				throw new Exception(MessageAppli.MSG_DATE_MAUVAIS_FORMAT
						+ Constante.FORMAT_DATE_SHORT);
			}

			//test si ma date annee est au bon format
			String str_Comparaison_Annee = "01/01/" + champAnnee;
			Date dateAnnee = DateUtil.checkDate(Constante.FORMAT_DATE_SHORT,
					str_Comparaison_Annee);
			if (dateAnnee == null) {
				throw new Exception(MessageAppli.MSG_DATE_MAUVAIS_FORMAT
						+ Constante.FORMAT_DATE_SHORT);
			}
			
			// test la date debut et l'année: si l'année est > à la date debut
			if (dateAnnee.compareTo(dateDeb) == 1) {
				
				throw new Exception(MessageAppli.MSG_ANNE_SUPERRIEUR);
			}

			// Test Date fin
			Date dateFin = DateUtil.checkDate(Constante.FORMAT_DATE_SHORT,
					jPanAjoutStage.getJtf_DateFin().getText());
			if (dateFin == null) {
				throw new Exception(MessageAppli.MSG_DATE_MAUVAIS_FORMAT
						+ Constante.FORMAT_DATE_SHORT);
			}

			// comparer ma date de debut et ma date de fin
			if (dateDeb.compareTo(dateFin) == 1) {
				// ma date de debut est > à ma date de fin
				throw new Exception(MessageAppli.MSG_DATE_ERREUR_SUPPERIEUR);
			}

			// je regroupe mes deux chaines annee-Categorie
			String nomStage = champAnnee.substring(2) + "-" + categorieStage.getLibelleCat();

			Stage stage = new Stage(null, nomStage, dateDeb, dateFin,
					categorieStage.getIdCategorie());

			// On recherche si un stage ayant le meme nom
			// TODO creer
			if (!StageJdbc.stageExisteByNom(Connexion.getConnexion(), nomStage)) {
				if (StageJdbc.ajouter(Connexion.getConnexion(), stage)) {
					JOptionPane.showMessageDialog(null,
							MessageAppli.MSG_STAGE_CREATION_OK,
							MessageAppli.MSG_TITRE_INFO,
							JOptionPane.INFORMATION_MESSAGE);
					MenuControle.afficherPan(new JPanAjoutStage(
							"ajout d'un stage", null, null, null));
				} else {
					throw new Exception(MessageAppli.MSG_STAGE_CREATION_KO);
				}

			} else {
				throw new Exception(MessageAppli.MSG_STAGE_DEJA_EXISTANT);
			}
		} catch (Exception e) {
			e.printStackTrace();
			JOptionPane.showMessageDialog(null, e.getMessage(),
					MessageAppli.MSG_TITRE_INFO, JOptionPane.WARNING_MESSAGE);
		}
	}
}